home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / amos / amoslist-1294.lzh / AMOSLIST / text0069.txt < prev    next >
Encoding:
Text File  |  1995-01-03  |  2.2 KB  |  102 lines

  1. I thought this little program might be relevent to the recent inertia /
  2. gravity stuff on the list recently.
  3.  
  4. Dom
  5.  
  6. ----Cut here----
  7.  
  8. ' Bouncing Balls 
  9. ' All collisions are calculated (fairly) accurately  
  10. ' By Dominic Ramsey  
  11. '
  12. NB=15
  13. Dim X(NB),Y(NB),DX(NB),DY(NB)
  14. Global X(),Y(),DX(),DY(),NB
  15. '
  16. INIT
  17. BALLS
  18. '
  19. Procedure INIT
  20.    Screen Open 0,640,512,2,Hires+Laced : Flash Off : Cls 0
  21.    Hide On 
  22.    Ellipse 6,6,3,3
  23.    Paint 6,6
  24.    Get Bob 1,3,3 To 10,10
  25.    Palette 0,$FF0,$F0F,$FF,
  26.    Cls 0
  27.    Double Buffer : Autoback 0 : Update Off 
  28.    '
  29.    For I=1 To NB
  30.       X(I)=Rnd(639000) : Y(I)=Rnd(400000)
  31.       Bob I,X(I)/1000,Y(I)/1000,1
  32.    Next I
  33.    Randomize Timer
  34. End Proc
  35. Procedure BALLS
  36.    Repeat 
  37.       For I=1 To NB
  38.          '
  39.          If Abs(DX(I))<1000 and Abs(DY(I))<1000
  40.             DX(I)=Rnd(60000)-20000
  41.             DY(I)=Rnd(60000)-30000
  42.          End If 
  43.          Add DY(I),600
  44.          Add X(I),DX(I)
  45.          Add Y(I),DY(I)
  46.          '
  47.          DX(I)=DX(I)/1.01
  48.          DY(I)=DY(I)/1.01
  49.          '
  50.          If X(I)<0 or X(I)>639000
  51.             DX(I)=-DX(I)
  52.             Add X(I),DX(I)
  53.          End If 
  54.          '
  55.          If Y(I)<0 or Y(I)>500000
  56.             DY(I)=-DY(I)
  57.             If Y(I)<0
  58.                Y(I)=0
  59.             Else 
  60.                Y(I)=500000
  61.             End If 
  62.          End If 
  63.          '  
  64.          Bob I,X(I)/1000,Y(I)/1000,
  65.          '
  66.          If Bob Col(I)
  67.             J=Col(-1)
  68.             If X(J)=X(I)
  69.                Inc X(J)
  70.             End If 
  71.             '
  72.             W#=Atan((Y(I)-Y(J))/(X(J)-X(I)))
  73.             S#=Sin(W#)
  74.             C#=Cos(W#)
  75.             SS#=S#*S#
  76.             CC#=C#*C#
  77.             CS#=C#*S#
  78.             DXT1=DX(I)*SS#+DX(J)*CC#+(DY(I)-DY(J))*CS#
  79.             DYT1=DY(I)*CC#+DY(J)*SS#+(DX(I)-DX(J))*CS#
  80.             DXT2=DX(J)*SS#+DX(I)*CC#+(DY(J)-DY(I))*CS#
  81.             DY(J)=(DY(J)*CC#+DY(I)*SS#+(DX(J)-DX(I))*CS#)
  82.             DX(I)=DXT1
  83.             DY(I)=DYT1
  84.             DX(J)=DXT2
  85.             Add X(J),DX(J)
  86.             Add Y(J),DY(J)
  87.          End If 
  88.          '
  89.       Next I
  90.       Update 
  91.       Wait Vbl 
  92.    Until Mouse Key>0
  93.    '
  94.    Erase 1
  95. End Proc
  96.  
  97.  
  98. --
  99. Dominic Ramsey      email: dom@dynamo.demon.co.uk
  100. http://www.gate.net/user/play/people/dramsey.html
  101.  
  102.